- 1) Espacio muestral completo
- 2) Número de elementos del espacio muestral completo
- 3) Número de elementos del espacio muestral “sacar 3 caras” y del espacio muestral “sacar 4 caras”.
- 4) Probabilidad de que salga 0 caras, 1 cara, 2 caras, 3 caras, 4 caras y 5 caras
- 5) Gráfico de la función de probabilidad
- 6) Función de Distribución
- 7) Gráfico de la Función de Distribución.
- 8) Probabilidad de que el número de caras sea menor o igual que 3.
- 9) Probabilidad de que el número de caras sea mayor que 2
- 10) Probabilidad de que el número de caras se encuentre entre 1 y 4 (ambos incluidos)
- 11) Probabilidad de que el número de caras se encuentre entre 1 y 4 (ambos NO incluidos)
- 12) Esperanza de la v.a. X
- 13) Varianza de la v.a. X
Antes de comenzar a resolver las Preguntas, vamos a cargar las librerias en R
library(tidyverse)
library(psych)
library(kableExtra)
library(ggplot2)
library(ggthemes)
library(plotly)
library(dplyr)Supongamos que lanzamos una moneda 5 veces y que X es la v.a. que representa el número de caras (0, 1, 2, 3, 4 y 5).
La variable aleatoria X que representa el numero de caras sigue una distribucion binominal X ~B(n,p) ya que:
- Existe un número fijo de pruebas idénticas, en este caso, lanzar 5 veces una moneda.
- El resultado de cada lanzamiento solo puede ser cara o sello, en este caso, cara seria considerado como exito con probabilidad p y cruz como fracaso con la probabilidad 1-p
- Cada lanzamiento es independiente, es decir, el resultado de un lanzamiento no influye sobre el resultado siguiente.
- La variable de interes X es el numero de exitos en las n pruebas, es decir, el numero de caras que se obtienen
Como la variable que sigue una distribucion Binominal, podremos definir los siguinetes parametros:
Por lo tanto la variable X que representa el numero de caras el numero sigue una distribucion Binominal X ~B(5,05)
Calcular:
1) Espacio muestral completo
En este ejemplo concreto, se realiza el lanzamiento de una moneda 5 veces, siendo los posibles resultados Cara o Sello, para definir el espacio muestral completo, disponemos del comoando expand.gird() en R, que nos genera un data frame de todas las combinaciones posibles con los vectores que introduzcamos. En este caso serian 5 vectores iguales formados por dos valores, Cara o Sello
espacio_muestral <- expand.grid(c("cara", "sello"),
c("cara", "sello"),
c("cara", "sello"),
c("cara", "sello"),
c("cara", "sello"))
names(espacio_muestral)[1] = "Primer lanzamiento"
names(espacio_muestral)[2] = "Segundo lanzamiento"
names(espacio_muestral)[3] = "Tercer lanzamiento"
names(espacio_muestral)[4] = "Cuarto lanzamiento"
names(espacio_muestral)[5] = "Quinto lanzamiento"
color_celda <- function(x) {
ifelse(x == "cara",
cell_spec(x, "html", color = "white", bold = TRUE, background = "purple"),
cell_spec(x, "html", color = "white", bold = TRUE, background = "pink"))
}
espacio_muestral_coloreado <- espacio_muestral %>%
mutate(across(everything(), ~ color_celda(.)))
# Formato tabla
espacio_muestral_coloreado %>%
kable(escape = FALSE, format = "html") %>%
kable_styling(bootstrap_options = c("striped", "bordered", "hover", "responsive"),
full_width = FALSE,
position = "center",
font_size = 16) %>%
row_spec(0, bold = TRUE, color = "white", align = "center")| Primer lanzamiento | Segundo lanzamiento | Tercer lanzamiento | Cuarto lanzamiento | Quinto lanzamiento |
|---|---|---|---|---|
| cara | cara | cara | cara | cara |
| sello | cara | cara | cara | cara |
| cara | sello | cara | cara | cara |
| sello | sello | cara | cara | cara |
| cara | cara | sello | cara | cara |
| sello | cara | sello | cara | cara |
| cara | sello | sello | cara | cara |
| sello | sello | sello | cara | cara |
| cara | cara | cara | sello | cara |
| sello | cara | cara | sello | cara |
| cara | sello | cara | sello | cara |
| sello | sello | cara | sello | cara |
| cara | cara | sello | sello | cara |
| sello | cara | sello | sello | cara |
| cara | sello | sello | sello | cara |
| sello | sello | sello | sello | cara |
| cara | cara | cara | cara | sello |
| sello | cara | cara | cara | sello |
| cara | sello | cara | cara | sello |
| sello | sello | cara | cara | sello |
| cara | cara | sello | cara | sello |
| sello | cara | sello | cara | sello |
| cara | sello | sello | cara | sello |
| sello | sello | sello | cara | sello |
| cara | cara | cara | sello | sello |
| sello | cara | cara | sello | sello |
| cara | sello | cara | sello | sello |
| sello | sello | cara | sello | sello |
| cara | cara | sello | sello | sello |
| sello | cara | sello | sello | sello |
| cara | sello | sello | sello | sello |
| sello | sello | sello | sello | sello |
Para comprobar que los datos se han almacenado en un data frame utilizamos el comando de R class().
[1] "data.frame"
2) Número de elementos del espacio muestral completo
Para conocer el número de elementos del espacio muestral completo, podemos:
- Utilizar el comando dim() de R
[1] 32 5
- Sacar manualmente el número de filas de nuestro data frame, es decir, el numero de observaciones, que se corresponde con el número de posible combinaciones
[1] 32
El numero de elementos del espacio muestral completo es de 32 combinaciones posibles en los 5 lanzamientos.
3) Número de elementos del espacio muestral “sacar 3 caras” y del espacio muestral “sacar 4 caras”.
Nos estan pidiendo el número de combinaciones. de entre las 32 combinaciones posibles de nuestro espacio muestral, donde se han obtenido 3 caras o 4 caras respectivamente. Es decir, nos estan pidiendo el suceso “sacar 3 caras” y el suseso sacar 4 caras”.
Para ello, primro añadimos una columna adicional a nuestro data frame donde aparezca la suma del numero de caras que hay en cada observacion o combinacion posible
# Añadir una columna adicional para contar el número de "caras"
espacio_muestral$total_caras <- rowSums(espacio_muestral == "cara")
color_celda <- function(x) {
ifelse(x == "cara",
cell_spec(x, "html", color = "white", bold = TRUE, background = "purple"),
ifelse(x == "sello",
cell_spec(x, "html", color = "white", bold = TRUE, background = "pink"),
x))
}
espacio_muestral_coloreado <- espacio_muestral %>%
mutate(across(-total_caras, ~ color_celda(.)))
# Filtramos las combinaciones con 3 caras
combinaciones_3_caras <- espacio_muestral %>% filter(total_caras == 3)
n_3_caras <- nrow(combinaciones_3_caras)
# Filtramos las combinaciones con 4 caras
combinaciones_4_caras <- espacio_muestral %>% filter(total_caras == 4)
n_4_caras <- nrow(combinaciones_4_caras)
# Resultados
n_3_caras[1] 10
[1] 5
formato <- c("striped", "bordered", "hover", "responsive")
espacio_muestral_coloreado %>%
kable(escape = FALSE, format = "html") %>%
kable_styling(bootstrap_options = formato,
full_width = FALSE,
position = "center",
font_size = 16) %>%
row_spec(0, bold = TRUE, color = "white")| Primer lanzamiento | Segundo lanzamiento | Tercer lanzamiento | Cuarto lanzamiento | Quinto lanzamiento | total_caras |
|---|---|---|---|---|---|
| cara | cara | cara | cara | cara | 5 |
| sello | cara | cara | cara | cara | 4 |
| cara | sello | cara | cara | cara | 4 |
| sello | sello | cara | cara | cara | 3 |
| cara | cara | sello | cara | cara | 4 |
| sello | cara | sello | cara | cara | 3 |
| cara | sello | sello | cara | cara | 3 |
| sello | sello | sello | cara | cara | 2 |
| cara | cara | cara | sello | cara | 4 |
| sello | cara | cara | sello | cara | 3 |
| cara | sello | cara | sello | cara | 3 |
| sello | sello | cara | sello | cara | 2 |
| cara | cara | sello | sello | cara | 3 |
| sello | cara | sello | sello | cara | 2 |
| cara | sello | sello | sello | cara | 2 |
| sello | sello | sello | sello | cara | 1 |
| cara | cara | cara | cara | sello | 4 |
| sello | cara | cara | cara | sello | 3 |
| cara | sello | cara | cara | sello | 3 |
| sello | sello | cara | cara | sello | 2 |
| cara | cara | sello | cara | sello | 3 |
| sello | cara | sello | cara | sello | 2 |
| cara | sello | sello | cara | sello | 2 |
| sello | sello | sello | cara | sello | 1 |
| cara | cara | cara | sello | sello | 3 |
| sello | cara | cara | sello | sello | 2 |
| cara | sello | cara | sello | sello | 2 |
| sello | sello | cara | sello | sello | 1 |
| cara | cara | sello | sello | sello | 2 |
| sello | cara | sello | sello | sello | 1 |
| cara | sello | sello | sello | sello | 1 |
| sello | sello | sello | sello | sello | 0 |
Esta pregunta se puede resolver de 2 formas:
- Aproximacion 1. Para obtener el suseso de “3 caras” y el suseso de “4 caras” podemos almacenar la variable toral_caras y mediante el comando which, obtener las posiciones de las coordenas que cumplan las condiciones que le impogamos
[1] 5 4 4 3 4 3 3 2 4 3 3 2 3 2 2 1 4 3 3 2 3 2 2 1 3 2 2 1 2 1 1 0
[1] "numeric"
[1] 4 6 7 10 11 13 18 19 21 25
[1] 2 3 5 9 17
Para obtener el numero de combinaciones de cara , se puede utilizar el comando length() de b y c
[1] 10
[1] 5
El suceso “SACAR 3 CARAS” tiene 10 elementos, mientras que el suceso “SACAR 4 CARAS” tiene 5 elementos
- Aproximacion 2. Haciendo uso del comando table para calcular las frecuencias, es decir, el numero de elementos de cada observacion. No hay que olvidar convertir la tabla a un nuevo data frame.
mi_tabla = table(espacio_muestral$total_caras)
df = as.data.frame(mi_tabla)
#Cambiamos el nombre de las columnas
names(df)[1] = "numeros_caras"
names(df)[2] = "numeros_elemementos"
formato <- c("striped", "bordered", "hover", "responsive")
df %>% kable() %>% kable_styling(bootstrap_options = formato, full_width = FALSE, position = "center", font_size = 16) %>% row_spec(0, bold = TRUE, color = "pink")| numeros_caras | numeros_elemementos |
|---|---|
| 0 | 1 |
| 1 | 5 |
| 2 | 10 |
| 3 | 10 |
| 4 | 5 |
| 5 | 1 |
Con esta tabla podemos ver que se obtiene lo mismo que antes, 10 combinaciones donde aparecen 3 caras y 5 combinaciones donde aparecen 4 caras
4) Probabilidad de que salga 0 caras, 1 cara, 2 caras, 3 caras, 4 caras y 5 caras
Este apartado puede resolverse de 2 diferentes formas
- Aproximacion 1. Para calcular la probabilidad de que salgan 0 caras, 1 cara, 2 caras, 3 caras, 4 caras y 5 caras vamos a emplear los valores obtenidos en la tabla anterior. Hay que multiplicar la cantidad de combinaciones posibles para cada cara por la probilidad de cada elemento por separado conociendo el numero de elemenentos totales, que es el 32. Esto equivale aplicar la regla de Laplace para hallar la funcion de probabilidad, es decir el numero de casos favorables entre el numero de casos posibles.
[1] 0.03125
[1] 0.03125
[1] 0.15625
[1] 0.3125
[1] 0.3125
[1] 0.15625
[1] 0.03125
# Representamos los valores en una tabla
m = matrix(nrow = 6,
ncol = 1,
byrow = TRUE,
dimnames = list(c("0 caras", "1 caras","2 caras","3 caras","4 caras","5 caras"),
c("Funcion_probabilidad") ))
m_df = as.data.frame(m)
m_df[1,1] =P_0
m_df[2,1] =P_1
m_df[3,1] =P_2
m_df[4,1] =P_3
m_df[5,1] =P_4
m_df[6,1] =P_5
formato <- c("striped", "bordered", "hover", "responsive")
m_df %>% kable() %>% kable_styling(bootstrap_options = formato, full_width = FALSE, position = "center", font_size = 16) %>% row_spec(0, bold = TRUE, color = "pink")| Funcion_probabilidad | |
|---|---|
| 0 caras | 0.03125 |
| 1 caras | 0.15625 |
| 2 caras | 0.31250 |
| 3 caras | 0.31250 |
| 4 caras | 0.15625 |
| 5 caras | 0.03125 |
- Aproximacion 2. Haciendo uso de los parametros que introdujimos al principio y de los comandos disponibles de R para las distribuciones de variables; Mediante R, P(X=x)=dbinom(x,n,p)
x = c (0,1,2,3,4,5) # nº de caras
n = 5 # númewro de lanzamientos
p = 0.5 # probabilidad de que salga cara
f.prob.x = dbinom (x = x, size = n, prob = p)
f.prob.x[1] 0.03125 0.15625 0.31250 0.31250 0.15625 0.03125
#Representamos los valores de una tabla
tabla = data_frame(Numero_caras =x,
Funcion_Probabilidad = dbinom(x = x, size = n, prob = p))
formato <- c("striped", "bordered", "hover", "responsive")
tabla %>% kable() %>% kable_styling(bootstrap_options = formato, full_width = FALSE, position = "center", font_size = 16) %>% row_spec(0, bold = TRUE, color = "pink")| Numero_caras | Funcion_Probabilidad |
|---|---|
| 0 | 0.03125 |
| 1 | 0.15625 |
| 2 | 0.31250 |
| 3 | 0.31250 |
| 4 | 0.15625 |
| 5 | 0.03125 |
5) Gráfico de la función de probabilidad
Eje x = número de veces que sale cara. Eje y = probabilidad asociada a que salga ese número de caras.
- Aproximación 1.
Vamos a emplear los datos que hemos calculados nosotros con la primera aproximacion de calcular la función de probabilidad
El numero de caras va en el eje x mientras que la probabilidad asociada a que salga ese numero de caras va en el eje y. Almacenamos la información en dos vectores que luego metemos en la funcion ggplot. Para obtener un grafico interactivo, utilizamos la funcion ggploty
f_p = ggplot( data = m_df, aes(Numero_caras, Probabilidad)) +
geom_col(width = 0.7, fill = "pink") +
labs(title = "Funcion probabilidad variable X", x= "Numero de veces donde el resultados es cara", y = "Probabilidad") +
theme_hc() + geom_text(label = Probabilidad, nudge_y = 0.05, check_overlap = T)
p = ggplotly(f_p)
p - Aproximación 2.
Haciendo uso de los parametros que introducimos y de los comandos disponibles de R para las distribuciones de variable
f_p_2 = data.frame(lanzam = 0:5,
fun_prob = dbinom (x =0:5, size = 5, prob = 0.5)) %>%
ggplot(aes(x = (lanzam), y = fun_prob)) +
geom_col(width = 0.7, fill = "pink") +
labs(title = "Funcion probabilidad variable X", x= "Numero de veces donde el resultados es cara", y = "Probabilidad") +
theme_hc() + geom_text(label = Probabilidad, nudge_y = 0.05, check_overlap = T) +
geom_text(label = Probabilidad, nudge_y = 0.05, check_overlap = T)
ggplotly(f_p_2)6) Función de Distribución
Para calcular la funcion de distribución hay que ir sumando el valor de la funcion de probabilidad prevamiente calculculada. R dispone de una funcion, cumsum que va haciendo la suma acomulada. Al igual que ocurre con la funcion de probabilidad, este apartado puede resolverse de 3 formas diferentes
- Aproximacion 1.
Haciendo uso de los datos obtenidos previamente del calculo de la funcion de probabilidad
funcion_distribucion = cumsum(Probabilidad)
funcion_distribucion # Es un vector, por lo que luego podemos acceder a sus posiciones [1] 0.03125 0.18750 0.50000 0.81250 0.96875 1.00000
# Representamos los valores de la funcion distribucion en una tabla
m = matrix(nrow = 6,
ncol = 1,
byrow = TRUE,
dimnames = list(c("0 cara", "1 cara","2 caras","3 caras","4 caras","5 caras"),
c("Funcion_probabilidad") ))
m_df = as.data.frame(m)
m_df[1,1] =funcion_distribucion[1]
m_df[2,1] =funcion_distribucion[2]
m_df[3,1] =funcion_distribucion[3]
m_df[4,1] =funcion_distribucion[4]
m_df[5,1] =funcion_distribucion[5]
m_df[6,1] =funcion_distribucion[6]
formato <- c("striped", "bordered", "hover", "responsive")
m_df %>% kable() %>% kable_styling(bootstrap_options = formato, full_width = FALSE, position = "center", font_size = 16) %>% row_spec(0, bold = TRUE, color = "pink")| Funcion_probabilidad | |
|---|---|
| 0 cara | 0.03125 |
| 1 cara | 0.18750 |
| 2 caras | 0.50000 |
| 3 caras | 0.81250 |
| 4 caras | 0.96875 |
| 5 caras | 1.00000 |
- Aproximacion 2. Haciendo uso de los parametros que introducimos al principio que definen la variable y del los comandos disponibles en R para las distribuciones de variables. Se calcula la funcion de probabilidad y se hace la suma de la misma. Aqui tambien se usa el comando comsun
x = c (0,1,2,3,4,5) # nº de caras
n = 5 # númewro de lanzamientos
p = 0.5 # probabilidad de que salga cara
f.acum.x = cumsum(dbinom (x = x, size = n, prob = p))
f.acum.x[1] 0.03125 0.18750 0.50000 0.81250 0.96875 1.00000
- Aproximacion 3. Haciendo uso de los parametros que introducimos al principio que definen la variable y del los comandos disponibles en R para las distribuciones de variables. Se calcula directamente la funcion de distribucion mediante el comando pbinom con los parametros que definen la variable
#Representamos los valores de una tabla
tabla = data_frame(Numero_caras =x,
funcion_distribucion = pbinom(x,n,p))
formato <- c("striped", "bordered", "hover", "responsive")
tabla %>% kable() %>% kable_styling(bootstrap_options = formato, full_width = FALSE, position = "center", font_size = 16) %>% row_spec(0, bold = TRUE, color = "pink")| Numero_caras | funcion_distribucion |
|---|---|
| 0 | 0.03125 |
| 1 | 0.18750 |
| 2 | 0.50000 |
| 3 | 0.81250 |
| 4 | 0.96875 |
| 5 | 1.00000 |
Se obtienen los mismos valores valores en los 3 casos al igual que ocurre con la funcion de probabilidad
7) Gráfico de la Función de Distribución.
Para ello vamos a emplear los datos que hemos calculado nosotrso con la primera aproximacion de calcular la funcion de distribucion
f_d = ggplot( data = m_df, aes(Numero_caras, funcion_distribucion)) +
geom_line(linetype = 1, color = "pink") +
labs(title = "Funcion distribucion variable X numero de caras ", x= "Numero de veces donde el resultados es cara", y = "Probabilidad") +
theme_hc() + geom_text(label = funcion_distribucion, nudge_y = 0.05, check_overlap = T)
ggplotly(f_d)8) Probabilidad de que el número de caras sea menor o igual que 3.
x = c (0,1,2,3) # nº de caras
n = 5 # númewro de lanzamientos
p = 0.5 # probabilidad de que salga cara
funcion_probabilidad_menor_igual_3 <- pbinom(3, size = n, prob = p)
funcion_distribucion <- cumsum(dbinom(3, size = n, prob = p))
resultados <- data.frame(
numero_de_caras = x,
funcion_probabilidad = funcion_probabilidad_menor_igual_3,
funcion_distribucion = funcion_distribucion
)
cat("La probabilidad de obtener un número de caras menor o igual que 3 es:", funcion_probabilidad_menor_igual_3, "\n")La probabilidad de obtener un número de caras menor o igual que 3 es: 0.8125
formato <- c("striped", "bordered", "hover", "responsive")
resultados %>% kable() %>% kable_styling(bootstrap_options = formato, full_width = FALSE, position = "center", font_size = 16) %>% row_spec(0, bold = TRUE, color = "pink")| numero_de_caras | funcion_probabilidad | funcion_distribucion |
|---|---|---|
| 0 | 0.8125 | 0.3125 |
| 1 | 0.8125 | 0.3125 |
| 2 | 0.8125 | 0.3125 |
| 3 | 0.8125 | 0.3125 |
9) Probabilidad de que el número de caras sea mayor que 2
prob_mayor_que_2 <- 1 - pbinom(2, size = n, prob = p)
cat("La probabilidad de obtener un número de caras mayor que 2 es:", prob_mayor_que_2, "\n")La probabilidad de obtener un número de caras mayor que 2 es: 0.5
La probabilidad de obtener un número de caras mayor que 2 es: 0.5
10) Probabilidad de que el número de caras se encuentre entre 1 y 4 (ambos incluidos)
prob_entre_1_y_4 <- pbinom(4, size = n, prob = p) - pbinom(0, size = n, prob = p)
cat("La probabilidad de obtener un número de caras entre 1 y 4 es:", prob_entre_1_y_4, "\n")La probabilidad de obtener un número de caras entre 1 y 4 es: 0.9375
La probabilidad de obtener un número de caras entre 1 y 4 es: 0.9375
11) Probabilidad de que el número de caras se encuentre entre 1 y 4 (ambos NO incluidos)
prob_entre_2_y_3 <- pbinom(3, size = n, prob = p) - pbinom(1, size = n, prob = p)
cat("La probabilidad de obtener un número de caras entre 2 y 3 es:", prob_entre_2_y_3, "\n")La probabilidad de obtener un número de caras entre 2 y 3 es: 0.625
La probabilidad de obtener un número de caras entre 2 y 3 es: 0.625
12) Esperanza de la v.a. X
# Dataframe con los datos
Numero_caras <- c(0, 1, 2, 3, 4, 5)
Probabilidad <- c(0.03125, 0.15625, 0.3125, 0.3125, 0.15625, 0.03125)
m_df <- data.frame(Numero_caras, Probabilidad)
# Calcular la esperanza de la v.a. X
esperanza <- sum(m_df$Numero_caras * m_df$Probabilidad)
# resultado Esperanza X
paste("La esperanza de la v.a. X es:", esperanza)[1] "La esperanza de la v.a. X es: 2.5"
La esperanza de la v.a. X es: 2.5